
/** 公共函数 
 * @ 标  识: hchhIOT
 * @ 作  者: 阿拉丁矿工 黄传鸿 <hchhyzc@foxmail.com>
 */

/* ================================================================================================ */
// 🍀引入★
/* ================================================================================================ */
import axios from "axios"
import { saveAs } from 'file-saver';
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
// 🐸 图元端函数引入
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
import {
  onGetUUID,
  onRecordLog,
  // 🌱 布局
  onActionDownNavigation,  // 激活下框导航
  onPenContainerGet,// 下载笔筒
  onBlockGroupGet,  // 下载块组
} from "@/functions"

/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
// 🐸 引入存储
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
import { useMenuStore } from "@/store/menuStore"; // 菜单
import { useCanvasStore } from "@/store/canvasStore"; // 画布
import { useProjectStore } from "@/store/projectStore"; // 工程
import { useStaticStore } from "@/store/staticStore"; // 静态
import { useWorkStore } from "@/store/workStore"; // 工作数据

/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
// 🐸 使用存储
/**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
const menuStore = useMenuStore(); // 菜单
const canvasStore = useCanvasStore(); // 画布
const projectStore = useProjectStore(); // 工程
const staticStore = useStaticStore(); // 静态
const workStore = useWorkStore(); // 设备数据

// /** 路由 */
// const router = useRouter();
/* ================================================================================================ */
//                                函数 ★
/* ================================================================================================ */

/** 转储-从_工程存储_到_画布存储 */
export const saveProjectToCanvas = () => {
 // console.log("转储-从_工程存储_到_画布存储")
  let Index = projectStore.pageIndex
  canvasStore.canvasAttr = projectStore.pages[Index].canvasAttr
  workStore.pels = projectStore.pages[Index].pels
  workStore.pelData = projectStore.pages[Index].pelData
}

/** 转储-从_画布存储_到_工程存储 */
export const saveCanvasToProject = () => {
 // console.log("转储-从_画布存储_到_工程存储")
  let Index = projectStore.pageIndex
  projectStore.pages[Index].label = canvasStore.canvasAttr.pageName
  projectStore.pages[Index].key = canvasStore.canvasAttr.pageKey
  projectStore.pageId = String(canvasStore.canvasAttr.pageKey)
  projectStore.pages[Index].canvasAttr = canvasStore.canvasAttr
  projectStore.pages[Index].pels = workStore.pels
  projectStore.pages[Index].pelData = workStore.pelData
}

/** 保存工程 */
export const saveProject = (info: any) => {
 // console.log("保存工程")
 // console.log(info)
  projectStore.label = info.label
  projectStore.key = info.key
  projectStore.calendar = info.calendar
  projectStore.pageIndex = info.pageIndex
  projectStore.pageId = String(info.pageId)
  projectStore.pages = info.pages
  projectStore.elementCont = info.elementCont
  workStore.channels = info.channels
  workStore.equipData = info.equipData
}

/** 拼接工程 */
export const montageProject = () => {
 // console.log("拼接工程")
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 遍历 页面 建立视图数据
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  /** 页面 */
  let pages = projectStore.pages
  /** 视图数据 */
  let viewData = []
  for (let index = 0; index < pages.length; index++) {
    const pels = pages[index].pels
    /** 视图数据图元 */
    let viewDataPels = []
    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    // 🐸 遍历 图元数据
    /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
   // console.log("遍历-图元数据")
    for (let indexB = 0; indexB < pels.length; indexB++) {
      const elementB = pels[indexB]
     // console.log(elementB)
      /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
      // 🐸 遍历 图元数据
      /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
      viewDataPels.push({
        key: elementB.key,
        type: elementB.type,
        category: elementB.category,
        attrs: elementB.attrs,
        events: elementB.events,
        animations: elementB.animations,
        htmls: elementB.htmls
      })
      /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
      // 🐸 遍历到底 添加视图数据
      /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
      if (indexB === (pels.length - 1)) {
        viewData.push({
          /** 页面名称 */
          pageName: pages[index].canvasAttr.pageName,
          /** 页面键 */
          pageKey: pages[index].canvasAttr.pageKey,
          /** 画布背景颜色 */
          canvasBackColor: pages[index].canvasAttr.canvasBackColor,
          /** 图元 */
          pels: viewDataPels,
        })
        viewDataPels = []
      }
    }
  }

  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 输出当前工程
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  let CurrentProject = {
    /** 工程名称 */
    label: projectStore.label,
    /** 工程键 */
    key: projectStore.key,
    /** 日历 */
    calendar: projectStore.calendar,
    /** 当前页面索引 */
    pageIndex: projectStore.pageIndex,
    /** 当前页面id */
    pageId: projectStore.pageId,
    /** 页面集 */
    pages: projectStore.pages,
    /** 元素计数 */
    elementCont: projectStore.elementCont,
    /** 通道  */
    channels: workStore.channels,
    /** 设备数据  */
    equipData: workStore.equipData,
  }
  return CurrentProject
}

/** 获取工程列表 */
export const onProjectGetList = () => {
 // console.log("获取工程列表")
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 清理其他工作
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  menuStore.setMenuChild('svgPel', 0);       // 设置子菜单状态-SVG图元
  menuStore.setMenuChild('divPel', 0);       // 设置子菜单状态-DIV图元
  menuStore.setMenuChild('componertPel', 0); // 设置子菜单状态-组件图元
  menuStore.setMenuChild('eidt', 0);         // 设置子菜单状态-编辑
  menuStore.setMenuChild('wrapLayout', 0);   // 设置子菜单状态-包及图层编辑
  menuStore.setMenuChild('editLine', 0);     // 设置子菜单状态-线编辑
  canvasStore.tips = "获取工程列表"   // 提示
  canvasStore.workState = 0   //清理-工作状态
  canvasStore.drawPelType = ""//清理-绘制类型
  canvasStore.recordPoint = []  // 清理●记录点
  canvasStore.selectKeys = [] // 清理选择键

  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 发送-工程数据
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  axios({
    url: `/api/HCIOT?query=getProjectList`,
    method: 'get',
  })
    .then((response: any) => {
      /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
      // 🐸 转储-工程列表 到 工程存储
      /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
     // console.log(response)
      if (response.status === 200) {
        projectStore.projectList = response.data
        setTimeout(() => {
          onActionDownNavigation("DownProject")// 激活下框导航-工程
        }, 100)
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        // 🐸 提示 记录到日志
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        onRecordLog('获取工程列表成功')

      }
      else {
        onRecordLog('获取工程列表失败')
      }
    })
    .catch((error: any) => {
     // console.log("故障")
      onRecordLog('获取工程列表失败')
    })
}

/** 获取当前工程 */
export const onGetCurrentProject = () => {
 // console.log("获取当前工程")

  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 清理其他工作
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  menuStore.setMenuChild('svgPel', 0);       // 设置子菜单状态-SVG图元
  menuStore.setMenuChild('divPel', 0);       // 设置子菜单状态-DIV图元
  menuStore.setMenuChild('componertPel', 0); // 设置子菜单状态-组件图元
  menuStore.setMenuChild('eidt', 0);         // 设置子菜单状态-编辑
  menuStore.setMenuChild('wrapLayout', 0);   // 设置子菜单状态-包及图层编辑
  menuStore.setMenuChild('editLine', 0);     // 设置子菜单状态-线编辑
  canvasStore.tips = "获取当前工程"   // 提示
  canvasStore.workState = 0   //清理-工作状态
  canvasStore.drawPelType = ""//清理-绘制类型
  canvasStore.recordPoint = []  // 清理●记录点
  canvasStore.selectKeys = [] // 清理选择键

  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 发送-工程数据
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  axios({
    url: `/api/HCIOT?query=getCurrentProject`,
    method: 'get',
  })
    .then((response: any) => {
      if (response.status === 200) {
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        // 🐸 工程存储
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
       // console.log(response.data)
        saveProject(response.data)

        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        // 🐸 转储-工程存储_到_画布存储
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        saveProjectToCanvas()
        setTimeout(() => {
          onActionDownNavigation("DownProject")// 激活下框导航-工程
        }, 100)
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        // 🐸 提示 记录到日志
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        onRecordLog(`获取当前工程成功-${response.data.key}`)
      }
      else {
        onRecordLog(`获取当前工程失败`)
      }
    })
    .catch((error: any) => {
      /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
      // 🐸 提示 记录到日志
      /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
      onRecordLog(`获取当前工程失败`)
    })

}

/** 新建工程 */
export const onProjectNew = () => {
 // console.log("新建工程")
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 清理其他工作
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  menuStore.setMenuChild('svgPel', 0);       // 设置子菜单状态-SVG图元
  menuStore.setMenuChild('divPel', 0);       // 设置子菜单状态-DIV图元
  menuStore.setMenuChild('componertPel', 0); // 设置子菜单状态-组件图元
  menuStore.setMenuChild('eidt', 0);         // 设置子菜单状态-编辑
  menuStore.setMenuChild('wrapLayout', 0);   // 设置子菜单状态-包及图层编辑
  menuStore.setMenuChild('editLine', 0);     // 设置子菜单状态-线编辑
  canvasStore.tips = "新建工程"   // 提示
  canvasStore.workState = 0   //清理-工作状态
  canvasStore.drawPelType = ""//清理-绘制类型
  canvasStore.recordPoint = []  // 清理●记录点
  canvasStore.selectKeys = [] // 清理选择键
  /**清空-元素计数*/
  projectStore.elementCont = staticStore.elementCont

  /**★ 建立-工程名称 */
  let ProjectName = "工程" + onGetUUID()
  /** ★ 设置-工程名称 */
  projectStore.label = ProjectName
  /** ★ 建立-新建时间 */
  var time = new Date()
  let SaveCalendar = time.getFullYear() + '年' + time.getMonth() + '月' + time.getDate() + '日' + time.getHours() + '时' + time.getMinutes() + '分' + time.getSeconds() + '秒' + time.getMilliseconds() + '毫秒'
  /** ★ 设置-保存时间 */
  projectStore.calendar = SaveCalendar
  /** ★ 建立-键 */
  projectStore.key = 'P' + onGetUUID()
  /** ★ 设置-页面索引 */
  projectStore.pageIndex = 0
  /** ★ 设置-页面索引 */
  projectStore.pageId = 'page1';
  /** ★ 建立-工程中的页面 */
  projectStore.pages = [
    {
      label: "页面0",
      key: 'page1',
      /** 画布属性 */
      canvasAttr: {
        // 🦢 页面
        /** 页面名称 */
        pageName: "页面0",
        /** 页面尺寸 */
        pageSize: "svg_icon",
        /** 页面方向 */
        pageOrientation: "PageHorizontal",
        /** 页面精度 */
        pageAccuracy: "0级",
        /** 页面单位 */
        pageUnit: "px",
        /** 页面单位 */
        pageKey: "page1",

        // 🦢 画布
        /** 画布缩放 */
        canvasScale: 1,
        /** 画布背景色 */
        canvasBackColor: "rgba(0,0,0,1)",
        /** 画布宽度 */
        canvasWidth: 1024,
        /** 画布高度 */
        canvasHeight: 1024,
        // 🦢 格栅
        /** 格栅模式选项:1-无格栅;2-点格栅;3-方格; */
        gridModel: 1,
        /** 格栅样式选项:1-像素尺寸;2-均分画布;3-按宽高均分画布;*/
        gridStyle: 1,
        /** 格栅间距 */
        gridSpace: 10,
        /** 宽等分数 */
        gridBisectionWidthCont: 10,
        /** 宽等分数 */
        gridBisectionHeightCont: 10,
        /** 格栅点颜色 */
        gridDotColor: "rgba(255,255,255,1)",
        /** 小格颜色 */
        gridColorMini: "rgb(255,255,255)",
        /** 大格颜色 */
        gridColorMax: "rgb(255,255,255)",
        /** 格栅宽度 */
        gridWidth: 10,
        /** 格栅高度 */
        gridHeight: 10,

        // 🦢 光标
        /** 显示光标 */
        isShowCursor: false,
        /** 光标颜色 */
        cursorColor: "rgb(214,214,214)",
        /** 光标盒子尺寸 */
        cursorBoxSize: 30,
        /** 光标长度 */
        cursorLang: 1600,
        /** 光标线宽度 */
        cursorLineWidth: 1,
        
        // 🦢 捕捉
        /** 捕捉 */
        isCatch: true,
        /** 捕捉距离 */
        catchRange: 1,
        /** 捕捉到 上左 */
        catchUpLeft: false,
        /** 捕捉到 上 */
        catchUp: false,
        /** 捕捉到 上右 */
        catchUpRight: false,
        /** 捕捉到 左 */
        catchLeft: false,
        /** 捕捉到 中 */
        catchMidle: false,
        /** 捕捉到 右 */
        catchRight: false,
        /** 捕捉到 下右 */
        catchDownRight: false,
        /** 捕捉到 下 */
        catchDown: false,
        /** 捕捉到 下左 */
        catchDownLeft: false,
      },
      /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
      // 🐸 Svg 数据
      /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
      pels: [],
    }
  ]
  /** ★ 转储-工程存储_到_画布存储 */
  saveProjectToCanvas()
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 获取工程列表
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  onProjectGetList()// 获取工程列表

  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 下载笔筒  下载块组
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  onPenContainerGet()//下载笔筒
  onBlockGroupGet()//下载块组

  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 提示 记录到日志
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  onRecordLog(`新建文件成功`)
}

/** 获取工程 */
export const onGetProject = (Key: string) => {
 // console.log("获取工程")
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 清理其他工作
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  menuStore.setMenuChild('svgPel', 0);       // 设置子菜单状态-SVG图元
  menuStore.setMenuChild('divPel', 0);       // 设置子菜单状态-DIV图元
  menuStore.setMenuChild('componertPel', 0); // 设置子菜单状态-组件图元
  menuStore.setMenuChild('eidt', 0);         // 设置子菜单状态-编辑
  menuStore.setMenuChild('wrapLayout', 0);   // 设置子菜单状态-包及图层编辑
  menuStore.setMenuChild('editLine', 0);     // 设置子菜单状态-线编辑
  canvasStore.tips = "获取工程"   // 提示
  canvasStore.workState = 0   //清理-工作状态
  canvasStore.drawPelType = ""//清理-绘制类型
  canvasStore.recordPoint = []  // 清理●记录点
  canvasStore.selectKeys = [] // 清理选择键

  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 发送-工程数据
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  axios({
    url: `/api/HCIOT?query=getProject&Name=${Key}`,
    method: 'get',
  })
    .then((response: any) => {
      if (response.status === 200) {
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        // 🐸 工程存储
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
       // console.log(response.data)
        saveProject(response.data)
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        // 🐸 转储-工程存储_到_画布存储
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        saveProjectToCanvas()

        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        // 🐸 提示 记录到日志
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        onRecordLog(`获取工程成功-${Key}`)
      }
      else {
        onRecordLog('获取工程失败')
      }
    })
    .catch((error: any) => {
     // console.log("故障");
      onRecordLog('获取工程失败')
    })
}

/** 保存工程 */
export const onProjectSave = () => {
 // console.log("保存工程")
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 清理其他工作
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  menuStore.setMenuChild('svgPel', 0);       // 设置子菜单状态-SVG图元
  menuStore.setMenuChild('divPel', 0);       // 设置子菜单状态-DIV图元
  menuStore.setMenuChild('componertPel', 0); // 设置子菜单状态-组件图元
  menuStore.setMenuChild('eidt', 0);         // 设置子菜单状态-编辑
  menuStore.setMenuChild('wrapLayout', 0);   // 设置子菜单状态-包及图层编辑
  menuStore.setMenuChild('editLine', 0);     // 设置子菜单状态-线编辑
  canvasStore.tips = "获取工程"   // 提示
  canvasStore.workState = 0   //清理-工作状态
  canvasStore.drawPelType = ""//清理-绘制类型
  canvasStore.recordPoint = []  // 清理●记录点
  canvasStore.selectKeys = [] // 清理选择键
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 转储 建立 变量
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  /** 转储-从_画布存储_到_工程存储 */
  saveCanvasToProject()
  // ————————————————————————————————————————————————| 建立-保存时间
  var time = new Date()
  let SaveCalendar = time.getFullYear() + '年' + time.getMonth() + '月' + time.getDate() + '日' + time.getHours() + '时' + time.getMinutes() + '分' + time.getSeconds() + '秒' + time.getMilliseconds() + '毫秒'
 // console.log(SaveCalendar)
  projectStore.calendar = SaveCalendar
  // ————————————————————————————————————————————————| 当前工程
  let CurrentProject = montageProject()

  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 发送-工程数据
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  axios({
    url: `/api/HCIOT?query=saveProject&Name=${CurrentProject.key}`,
    method: 'post',
    headers: { 'content-type': 'application/json' },
    data: CurrentProject,
  })
    .then((response: any) => {
     // console.log(response.data)
      if (response.status === 200) {
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        // 🐸 提示 记录到日志
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        onRecordLog(`保存工程成功-${projectStore.key}`)
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        // 🐸 获取工程列表
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        onProjectGetList()// 获取工程列表
      } else {
        onRecordLog('保存工程故障')
      }
    })
    .catch((error: any) => {
     // console.log("故障")
      onRecordLog('保存工程故障')
    })


}

/** 备份工程 */
export const onProjectSaveAs = () => {
 // console.log("备份工程")
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 清理其他工作
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  menuStore.setMenuChild('svgPel', 0);       // 设置子菜单状态-SVG图元
  menuStore.setMenuChild('divPel', 0);       // 设置子菜单状态-DIV图元
  menuStore.setMenuChild('componertPel', 0); // 设置子菜单状态-组件图元
  menuStore.setMenuChild('eidt', 0);         // 设置子菜单状态-编辑
  menuStore.setMenuChild('wrapLayout', 0);   // 设置子菜单状态-包及图层编辑
  menuStore.setMenuChild('editLine', 0);     // 设置子菜单状态-线编辑
  canvasStore.tips = "获取工程"   // 提示
  canvasStore.workState = 0   //清理-工作状态
  canvasStore.drawPelType = ""//清理-绘制类型
  canvasStore.recordPoint = []  // 清理●记录点
  canvasStore.selectKeys = [] // 清理选择键
  onProjectSave()//保存工程
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 转储 建立 变量
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  /** 建立-保存时间 */
  var time = new Date()
  /** 日历 */
  let SaveCalendar = time.getFullYear() + '年' + time.getMonth() + '月' + time.getDate() + '日' + time.getHours() + '时' + time.getMinutes() + '分' + time.getSeconds() + '秒' + time.getMilliseconds() + '毫秒' + '_备份'
 // console.log(SaveCalendar)
  /** 获取当前工程 */
  let CurrentProject = montageProject()
 // console.log(CurrentProject)
  /** 转储-工程数据 */
  let SaveAsData = JSON.parse(JSON.stringify(CurrentProject))
  /** 设置-保存时间 */
  SaveAsData.calendar = SaveCalendar
  /** 设置-键 */
  SaveAsData.key = 'P' + onGetUUID()
 // console.log(SaveAsData)

  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 发送-备份-工程数据
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  axios({
    url: `/api/HCIOT?query=saveAsProject&Name=${SaveAsData.key}`,
    method: 'post',
    headers: { 'content-type': 'application/json' },
    data: SaveAsData,
  })
    .then((response: any) => {
     // console.log(response.data)
      if (response.status === 200) {
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        // 🐸 提示 记录到日志
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        onRecordLog(`备份工程成功-${SaveAsData.key}`)

        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        // 🐸 获取工程列表
        /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        onProjectGetList()// 获取工程列表

      }
      else {
        onRecordLog('备份工程故障')
      }
    })
    .catch((error: any) => {
     // console.log("故障")
      onRecordLog('备份工程故障')
    })
}

/** 删除工程 */
export const onProjectDelete = (Key: string) => {
 // console.log("删除工程")
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 清理其他工作
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  menuStore.setMenuChild('svgPel', 0);       // 设置子菜单状态-SVG图元
  menuStore.setMenuChild('divPel', 0);       // 设置子菜单状态-DIV图元
  menuStore.setMenuChild('componertPel', 0); // 设置子菜单状态-组件图元
  menuStore.setMenuChild('eidt', 0);         // 设置子菜单状态-编辑
  menuStore.setMenuChild('wrapLayout', 0);   // 设置子菜单状态-包及图层编辑
  menuStore.setMenuChild('editLine', 0);     // 设置子菜单状态-线编辑
  canvasStore.tips = "获取工程"   // 提示
  canvasStore.workState = 0   //清理-工作状态
  canvasStore.drawPelType = ""//清理-绘制类型
  canvasStore.recordPoint = []  // 清理●记录点
  canvasStore.selectKeys = [] // 清理选择键

  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 发送数据
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  axios({
    url: `/api/HCIOT?query=deleteProject&Name=${Key}`,
    method: 'get',
  })
    .then((response: any) => {
     // console.log(response.data)
      if (response.status === 200) {
        /** ★ 清空-当前文件名  */
        canvasStore.CurrentFile = ""
        onRecordLog(`删除工程成功-${Key}`)
      } else {
        onRecordLog('删除工程故障')
      }
      /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
      // 🐸 获取工程列表
      /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
      onProjectGetList()// 获取工程列表
    })
    .catch((error: any) => {
     // console.log("故障")
      onRecordLog('删除工程故障')
    })
}

/** 导出工程 */
export const onProjectLeadOutJSON = () => {
 // console.log("导出工程")
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 清理其他工作
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  menuStore.setMenuChild('svgPel', 0);       // 设置子菜单状态-SVG图元
  menuStore.setMenuChild('divPel', 0);       // 设置子菜单状态-DIV图元
  menuStore.setMenuChild('componertPel', 0); // 设置子菜单状态-组件图元
  menuStore.setMenuChild('eidt', 0);         // 设置子菜单状态-编辑
  menuStore.setMenuChild('wrapLayout', 0);   // 设置子菜单状态-包及图层编辑
  menuStore.setMenuChild('editLine', 0);     // 设置子菜单状态-线编辑
  canvasStore.tips = "获取工程"   // 提示
  canvasStore.workState = 0   //清理-工作状态
  canvasStore.drawPelType = ""//清理-绘制类型
  canvasStore.recordPoint = []  // 清理●记录点
  canvasStore.selectKeys = [] // 清理选择键
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  // 🐸 转储 建立 变量
  /**~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  /** 转储-从_画布存储_到_工程存储 */
  saveCanvasToProject()
  // ◆ 建立-保存时间
  var time = new Date()
  let Calendar = time.getFullYear() + '年' + time.getMonth() + '月' + time.getDate() + '日' + time.getHours() + '时' + time.getMinutes() + '分' + time.getSeconds() + '秒' + time.getMilliseconds() + '毫秒'
 // console.log(SaveCalendar)
  projectStore.calendar = Calendar
  // ◆ 拼接-当前工程
  let CurrentProject = montageProject()

  let Project = {
    calendar: Calendar,
    type: 'project',
    project: CurrentProject
  }
  // 将JSON数据转换为Blob对象
  const blob = new Blob([JSON.stringify(Project)], { type: 'application/json;charset=utf-8' });
  // 使用FileSaver.js保存Blob对象为JSON文件
  saveAs(blob, '传鸿组态_工程.json');
  canvasStore.tips = "导出传鸿组态工程成功";
}

/** 输出PDF文件 */
export const onProjectOutPDF = () => {
 // console.log("输出PDF文件")

}

/** 输出SVG文件 */
export const onProjectOutSVG = () => {
 // console.log("输出PDF文件")

}







